package com.xyw.code.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xyw.code.dto.UserDTO;
import com.xyw.code.dto.UserInfoDTO;
import com.xyw.code.entity.SysUser;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.Set;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author xuyiwei
 * @since 2019-07-30
 */
public interface ISysUserService extends IService<SysUser> {

    /**
     * 根据用户名得到用户
     * @param username
     * @return
     */
    SysUser findByUserName(String username);

    /**
     * 根据用户id查询权限
     * @param userId
     * @return
     */
    Set<String> findPermsByUserId(Integer userId);

    /**
     * 通过用户id查询角色id集合
     * @param userId
     * @return
     */
    Set<String> findRoleIdByUserId(Integer userId);

    /**
     * 通过用户id查询角色名字集合
     * @param userId
     * @return
     */
    Set<String> findRoleNameByUserId(Integer userId);

    /**
     * 登录
     * @param username
     * @param password
     * @param captcha
     * @param request
     * @return
     */
    String login(String username, String password, String captcha, String uuid, HttpServletRequest request);

    /**
     * 分页查询用户信息（含有角色信息）
     *
     * @param userDTO 参数列表
     * @return
     */
    IPage<SysUser> getUsersWithRolePage( UserDTO userDTO);

    /**
     * 保存用户以及角色部门等信息
     * @param userDto
     * @return
     */
    boolean insertUser(UserDTO userDto);

    /**
     * 更新用户以及角色部门等信息
     * @param userDto
     * @return
     */
    boolean updateUser(UserDTO userDto);

    /**
     * 删除用户信息
     * @param userId
     * @return
     */
    boolean removeUser(Integer userId);

    /**
     * 重置密码
     * @param userId
     * @return
     */
    boolean restPass(Integer userId);

    /**
     * 上传头像
     * @param file
     * @return
     */
    String uploadAvatar(MultipartFile file);

    /**
     * 更新用户详情
     * @param userDto
     * @return
     */
    Boolean updateUserInfo(UserInfoDTO userDto);

    /**
     * 更新密码
     * @param oldPass
     * @param newPass
     * @return
     */
    Boolean updatePass(String oldPass, String newPass);

    /**
     * 更新邮箱
     * @param email
     * @param code
     * @return
     */
    Boolean updateEmail(String email, String code,String sessionCode);
}
